🎖️GitЯра🎖️
Node / meshtastic / Meshtastic-Android / files / feature / settings / src / commonTest / kotlin / org / meshtastic / feature / settings / radio / ProfileRoundTripTest.kt
Displaying Raw • Download
feature/settings/src/commonTest/kotlin/org/meshtastic/feature/settings/radio/ProfileRoundTripTest.kt 2d20cd8a4708e2ef66e98d5259f3a97ec93f240a (2d20cd8a) Text, 12.28 KB
T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.feature.settings.radio
Tff7b72import T7ee787dev.mokkery.MockMode
Tff7b72import T7ee787dev.mokkery.answering.returns
Tff7b72import T7ee787dev.mokkery.every
Tff7b72import T7ee787dev.mokkery.mock
Tff7b72import T7ee787kotlinx.coroutines.CoroutineScope
Tff7b72import T7ee787kotlinx.coroutines.Dispatchers
Tff7b72import T7ee787kotlinx.coroutines.ExperimentalCoroutinesApi
Tff7b72import T7ee787kotlinx.coroutines.SupervisorJob
Tff7b72import T7ee787kotlinx.coroutines.flow.MutableSharedFlow
Tff7b72import T7ee787kotlinx.coroutines.flow.MutableStateFlow
Tff7b72import T7ee787kotlinx.coroutines.test.TestScope
Tff7b72import T7ee787kotlinx.coroutines.test.UnconfinedTestDispatcher
Tff7b72import T7ee787kotlinx.coroutines.test.resetMain
Tff7b72import T7ee787kotlinx.coroutines.test.runCurrent
Tff7b72import T7ee787kotlinx.coroutines.test.runTest
Tff7b72import T7ee787kotlinx.coroutines.test.setMain
Tff7b72import T7ee787okio.Buffer
Tff7b72import T7ee787okio.BufferedSink
Tff7b72import T7ee787okio.BufferedSource
Tff7b72import T7ee787org.meshtastic.core.common.util.CommonUri
Tff7b72import T7ee787org.meshtastic.core.domain.usecase.settings.AdminActionsUseCase
Tff7b72import T7ee787org.meshtastic.core.domain.usecase.settings.ExportProfileUseCase
Tff7b72import T7ee787org.meshtastic.core.domain.usecase.settings.ImportProfileUseCase
Tff7b72import T7ee787org.meshtastic.core.domain.usecase.settings.ImportSecurityConfigUseCase
Tff7b72import T7ee787org.meshtastic.core.domain.usecase.settings.InstallProfileUseCase
Tff7b72import T7ee787org.meshtastic.core.domain.usecase.settings.ProcessRadioResponseUseCase
Tff7b72import T7ee787org.meshtastic.core.domain.usecase.settings.RadioConfigUseCase
Tff7b72import T7ee787org.meshtastic.core.model.ConnectionState
Tff7b72import T7ee787org.meshtastic.core.repository.AnalyticsPrefs
Tff7b72import T7ee787org.meshtastic.core.repository.FileService
Tff7b72import T7ee787org.meshtastic.core.repository.HomoglyphPrefs
Tff7b72import T7ee787org.meshtastic.core.repository.LocationRepository
Tff7b72import T7ee787org.meshtastic.core.repository.LocationService
Tff7b72import T7ee787org.meshtastic.core.repository.MapConsentPrefs
Tff7b72import T7ee787org.meshtastic.core.repository.MqttManager
Tff7b72import T7ee787org.meshtastic.core.repository.NodeRestartTracker
Tff7b72import T7ee787org.meshtastic.core.repository.PacketRepository
Tff7b72import T7ee787org.meshtastic.core.repository.RadioConfigRepository
Tff7b72import T7ee787org.meshtastic.core.repository.SecurityKeyBackupStore
Tff7b72import T7ee787org.meshtastic.core.repository.ServiceRepository
Tff7b72import T7ee787org.meshtastic.core.testing.FakeLockdownCoordinator
Tff7b72import T7ee787org.meshtastic.core.testing.FakeNodeRepository
Tff7b72import T7ee787org.meshtastic.core.ui.util.SnackbarManager
Tff7b72import T7ee787org.meshtastic.proto.ChannelSet
Tff7b72import T7ee787org.meshtastic.proto.Config
Tff7b72import T7ee787org.meshtastic.proto.DeviceProfile
Tff7b72import T7ee787org.meshtastic.proto.LocalConfig
Tff7b72import T7ee787org.meshtastic.proto.LocalModuleConfig
Tff7b72import T7ee787org.meshtastic.proto.MeshPacket
Tff7b72import T7ee787org.meshtastic.proto.ModuleConfig
Tff7b72import T7ee787org.meshtastic.proto.Position
Tff7b72import T7ee787kotlin.test.AfterTest
Tff7b72import T7ee787kotlin.test.BeforeTest
Tff7b72import T7ee787kotlin.test.Test
Tff7b72import T7ee787kotlin.test.assertContentEquals
Tff7b72import T7ee787kotlin.test.assertEquals
Tff7b72import T7ee787kotlin.test.assertNotNull
Tf0883e@OptInTb4b4b4(Te6edf3ExperimentalCoroutinesApiTff7b72::Te6edf3classTb4b4b4)
Tff7b72class T56d364ProfileRoundTripTest Tb4b4b4{
Tff7b72private Tff7b72val Te6edf3testDispatcher Tff7b72= Te6edf3UnconfinedTestDispatcherTb4b4b4(Tb4b4b4)
Tff7b72private Tff7b72val Te6edf3radioConfigRepositoryTb4b4b4: Te6edf3RadioConfigRepository Tff7b72= Te6edf3mockTb4b4b4(Te6edf3MockModeTb4b4b4.Te6edf3autofillTb4b4b4)
Tff7b72private Tff7b72val Te6edf3packetRepositoryTb4b4b4: Te6edf3PacketRepository Tff7b72= Te6edf3mockTb4b4b4(Te6edf3MockModeTb4b4b4.Te6edf3autofillTb4b4b4)
Tff7b72private Tff7b72val Te6edf3serviceRepositoryTb4b4b4: Te6edf3ServiceRepository Tff7b72= Te6edf3mockTb4b4b4(Te6edf3MockModeTb4b4b4.Te6edf3autofillTb4b4b4)
Tff7b72private Tff7b72val Te6edf3nodeRepository Tff7b72= Te6edf3FakeNodeRepositoryTb4b4b4(Tb4b4b4)
Tff7b72private Tff7b72val Te6edf3locationRepositoryTb4b4b4: Te6edf3LocationRepository Tff7b72= Te6edf3mockTb4b4b4(Te6edf3MockModeTb4b4b4.Te6edf3autofillTb4b4b4)
Tff7b72private Tff7b72val Te6edf3mapConsentPrefsTb4b4b4: Te6edf3MapConsentPrefs Tff7b72= Te6edf3mockTb4b4b4(Te6edf3MockModeTb4b4b4.Te6edf3autofillTb4b4b4)
Tff7b72private Tff7b72val Te6edf3analyticsPrefsTb4b4b4: Te6edf3AnalyticsPrefs Tff7b72= Te6edf3mockTb4b4b4(Te6edf3MockModeTb4b4b4.Te6edf3autofillTb4b4b4)
Tff7b72private Tff7b72val Te6edf3homoglyphEncodingPrefsTb4b4b4: Te6edf3HomoglyphPrefs Tff7b72= Te6edf3mockTb4b4b4(Te6edf3MockModeTb4b4b4.Te6edf3autofillTb4b4b4)
Tff7b72private Tff7b72val Te6edf3importSecurityConfigUseCaseTb4b4b4: Te6edf3ImportSecurityConfigUseCase Tff7b72= Te6edf3mockTb4b4b4(Te6edf3MockModeTb4b4b4.Te6edf3autofillTb4b4b4)
Tff7b72private Tff7b72val Te6edf3securityKeyBackupStoreTb4b4b4: Te6edf3SecurityKeyBackupStore Tff7b72= Te6edf3mockTb4b4b4(Te6edf3MockModeTb4b4b4.Te6edf3autofillTb4b4b4)
Tff7b72private Tff7b72val Te6edf3snackbarManagerTb4b4b4: Te6edf3SnackbarManager Tff7b72= Te6edf3mockTb4b4b4(Te6edf3MockModeTb4b4b4.Te6edf3autofillTb4b4b4)
Tff7b72private Tff7b72val Te6edf3nodeRestartTracker Tff7b72= Te6edf3NodeRestartTrackerTb4b4b4(Te6edf3CoroutineScopeTb4b4b4(Te6edf3SupervisorJobTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72private Tff7b72val Te6edf3installProfileUseCaseTb4b4b4: Te6edf3InstallProfileUseCase Tff7b72= Te6edf3mockTb4b4b4(Te6edf3MockModeTb4b4b4.Te6edf3autofillTb4b4b4)
Tff7b72private Tff7b72val Te6edf3radioConfigUseCaseTb4b4b4: Te6edf3RadioConfigUseCase Tff7b72= Te6edf3mockTb4b4b4(Te6edf3MockModeTb4b4b4.Te6edf3autofillTb4b4b4)
Tff7b72private Tff7b72val Te6edf3adminActionsUseCaseTb4b4b4: Te6edf3AdminActionsUseCase Tff7b72= Te6edf3mockTb4b4b4(Te6edf3MockModeTb4b4b4.Te6edf3autofillTb4b4b4)
Tff7b72private Tff7b72val Te6edf3processRadioResponseUseCaseTb4b4b4: Te6edf3ProcessRadioResponseUseCase Tff7b72= Te6edf3mockTb4b4b4(Te6edf3MockModeTb4b4b4.Te6edf3autofillTb4b4b4)
Tff7b72private Tff7b72val Te6edf3locationServiceTb4b4b4: Te6edf3LocationService Tff7b72= Te6edf3mockTb4b4b4(Te6edf3MockModeTb4b4b4.Te6edf3autofillTb4b4b4)
Tff7b72private Tff7b72val Te6edf3mqttManagerTb4b4b4: Te6edf3MqttManager Tff7b72= Te6edf3mockTb4b4b4(Te6edf3MockModeTb4b4b4.Te6edf3autofillTb4b4b4)
Tff7b72private Tff7b72lateinit Tff7b72var Te6edf3fileServiceTb4b4b4: Te6edf3InMemoryFileService
Tff7b72private Tff7b72lateinit Tff7b72var Te6edf3viewModelTb4b4b4: Te6edf3RadioConfigViewModel
Tf0883e@BeforeTest
Tff7b72fun Td2a8ffsetUpTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3DispatchersTb4b4b4.Te6edf3setMainTb4b4b4(Te6edf3testDispatcherTb4b4b4)
Te6edf3fileService Tff7b72= Te6edf3InMemoryFileServiceTb4b4b4(Tb4b4b4)
Te6edf3every Tb4b4b4{ Te6edf3radioConfigRepositoryTb4b4b4.Te6edf3deviceProfileFlow Tb4b4b4} Te6edf3returns Te6edf3MutableStateFlowTb4b4b4(Te6edf3DeviceProfileTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3every Tb4b4b4{ Te6edf3radioConfigRepositoryTb4b4b4.Te6edf3localConfigFlow Tb4b4b4} Te6edf3returns Te6edf3MutableStateFlowTb4b4b4(Te6edf3LocalConfigTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3every Tb4b4b4{ Te6edf3radioConfigRepositoryTb4b4b4.Te6edf3channelSetFlow Tb4b4b4} Te6edf3returns Te6edf3MutableStateFlowTb4b4b4(Te6edf3ChannelSetTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3every Tb4b4b4{ Te6edf3radioConfigRepositoryTb4b4b4.Te6edf3moduleConfigFlow Tb4b4b4} Te6edf3returns Te6edf3MutableStateFlowTb4b4b4(Te6edf3LocalModuleConfigTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3every Tb4b4b4{ Te6edf3radioConfigRepositoryTb4b4b4.Te6edf3deviceUIConfigFlow Tb4b4b4} Te6edf3returns Te6edf3MutableStateFlowTb4b4b4(Tff7b72nullTb4b4b4)
Te6edf3every Tb4b4b4{ Te6edf3radioConfigRepositoryTb4b4b4.Te6edf3fileManifestFlow Tb4b4b4} Te6edf3returns Te6edf3MutableStateFlowTb4b4b4(Te6edf3emptyListTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3every Tb4b4b4{ Te6edf3radioConfigRepositoryTb4b4b4.Te6edf3loraRegionPresetMapFlow Tb4b4b4} Te6edf3returns Te6edf3MutableStateFlowTb4b4b4(Tff7b72nullTb4b4b4)
Te6edf3every Tb4b4b4{ Te6edf3analyticsPrefsTb4b4b4.Te6edf3analyticsAllowed Tb4b4b4} Te6edf3returns Te6edf3MutableStateFlowTb4b4b4(Tff7b72falseTb4b4b4)
Te6edf3every Tb4b4b4{ Te6edf3homoglyphEncodingPrefsTb4b4b4.Te6edf3homoglyphEncodingEnabled Tb4b4b4} Te6edf3returns Te6edf3MutableStateFlowTb4b4b4(Tff7b72falseTb4b4b4)
Te6edf3every Tb4b4b4{ Te6edf3serviceRepositoryTb4b4b4.Te6edf3meshPacketFlow Tb4b4b4} Te6edf3returns Te6edf3MutableSharedFlowTff7b72<Te6edf3MeshPacketTff7b72>Tb4b4b4(Tb4b4b4)
Te6edf3every Tb4b4b4{ Te6edf3serviceRepositoryTb4b4b4.Te6edf3connectionState Tb4b4b4} Te6edf3returns Te6edf3MutableStateFlowTb4b4b4(Te6edf3ConnectionStateTb4b4b4.Te6edf3ConnectedTb4b4b4)
Te6edf3every Tb4b4b4{ Te6edf3mqttManagerTb4b4b4.Te6edf3mqttConnectionState Tb4b4b4} Te6edf3returns
Te6edf3MutableStateFlowTb4b4b4(Te6edf3orgTb4b4b4.Te6edf3meshtasticTb4b4b4.Te6edf3coreTb4b4b4.Te6edf3modelTb4b4b4.Te6edf3MqttConnectionStateTb4b4b4.Te6edf3InactiveTb4b4b4)
Te6edf3viewModel Tff7b72=
Te6edf3RadioConfigViewModelTb4b4b4(
Te6edf3destNum Tff7b72= Tff7b72nullTb4b4b4,
Te6edf3radioConfigRepository Tff7b72= Te6edf3radioConfigRepositoryTb4b4b4,
Te6edf3packetRepository Tff7b72= Te6edf3packetRepositoryTb4b4b4,
Te6edf3serviceRepository Tff7b72= Te6edf3serviceRepositoryTb4b4b4,
Te6edf3nodeRepository Tff7b72= Te6edf3nodeRepositoryTb4b4b4,
Te6edf3locationRepository Tff7b72= Te6edf3locationRepositoryTb4b4b4,
Te6edf3mapConsentPrefs Tff7b72= Te6edf3mapConsentPrefsTb4b4b4,
Te6edf3analyticsPrefs Tff7b72= Te6edf3analyticsPrefsTb4b4b4,
Te6edf3homoglyphEncodingPrefs Tff7b72= Te6edf3homoglyphEncodingPrefsTb4b4b4,
Te6edf3importProfileUseCase Tff7b72= Te6edf3ImportProfileUseCaseTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3exportProfileUseCase Tff7b72= Te6edf3ExportProfileUseCaseTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3importSecurityConfigUseCase Tff7b72= Te6edf3importSecurityConfigUseCaseTb4b4b4,
Te6edf3installProfileUseCase Tff7b72= Te6edf3installProfileUseCaseTb4b4b4,
Te6edf3radioConfigUseCase Tff7b72= Te6edf3radioConfigUseCaseTb4b4b4,
Te6edf3adminActionsUseCase Tff7b72= Te6edf3adminActionsUseCaseTb4b4b4,
Te6edf3processRadioResponseUseCase Tff7b72= Te6edf3processRadioResponseUseCaseTb4b4b4,
Te6edf3locationService Tff7b72= Te6edf3locationServiceTb4b4b4,
Te6edf3fileService Tff7b72= Te6edf3fileServiceTb4b4b4,
Te6edf3mqttManager Tff7b72= Te6edf3mqttManagerTb4b4b4,
Te6edf3lockdownCoordinator Tff7b72= Te6edf3FakeLockdownCoordinatorTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3securityKeyBackupStore Tff7b72= Te6edf3securityKeyBackupStoreTb4b4b4,
Te6edf3snackbarManager Tff7b72= Te6edf3snackbarManagerTb4b4b4,
Te6edf3nodeRestartTracker Tff7b72= Te6edf3nodeRestartTrackerTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tf0883e@AfterTest
Tff7b72fun Td2a8fftearDownTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3DispatchersTb4b4b4.Te6edf3resetMainTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ff`profile export then import round trips representative DeviceProfile`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3assertRoundTripTb4b4b4(
Te6edf3DeviceProfileTb4b4b4(
Te6edf3long_name Tff7b72= Ta5d6ff"Ta5d6ffRound Trip NodeTa5d6ff"Tb4b4b4,
Te6edf3short_name Tff7b72= Ta5d6ff"Ta5d6ffRTNTa5d6ff"Tb4b4b4,
Te6edf3channel_url Tff7b72= Ta5d6ff"Ta5d6ffhttps://meshtastic.org/e/#CgMSAQESBggBQANIAQTa5d6ff"Tb4b4b4,
Te6edf3config Tff7b72=
Te6edf3LocalConfigTb4b4b4(
Te6edf3device Tff7b72= Te6edf3ConfigTb4b4b4.Te6edf3DeviceConfigTb4b4b4(Te6edf3role Tff7b72= Te6edf3ConfigTb4b4b4.Te6edf3DeviceConfigTb4b4b4.Te6edf3RoleTb4b4b4.Te6edf3ROUTERTb4b4b4, Te6edf3button_gpio Tff7b72= T79c0ff7Tb4b4b4)Tb4b4b4,
Te6edf3lora Tff7b72= Te6edf3ConfigTb4b4b4.Te6edf3LoRaConfigTb4b4b4(Te6edf3hop_limit Tff7b72= T79c0ff5Tb4b4b4, Te6edf3use_preset Tff7b72= Tff7b72trueTb4b4b4)Tb4b4b4,
Te6edf3power Tff7b72= Te6edf3ConfigTb4b4b4.Te6edf3PowerConfigTb4b4b4(Te6edf3is_power_saving Tff7b72= Tff7b72trueTb4b4b4, Te6edf3ls_secs Tff7b72= T79c0ff3T79c0ff0T79c0ff0Tb4b4b4)Tb4b4b4,
Te6edf3network Tff7b72=
Te6edf3ConfigTb4b4b4.Te6edf3NetworkConfigTb4b4b4(
Te6edf3wifi_enabled Tff7b72= Tff7b72trueTb4b4b4,
Te6edf3wifi_ssid Tff7b72= Ta5d6ff"Ta5d6ffmesh-ssidTa5d6ff"Tb4b4b4,
Te6edf3wifi_psk Tff7b72= Ta5d6ff"Ta5d6ffmesh-passTa5d6ff"Tb4b4b4,
Te6edf3ntp_server Tff7b72= Ta5d6ff"Ta5d6ffmeshtastic.pool.ntp.orgTa5d6ff"Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3module_config Tff7b72=
Te6edf3LocalModuleConfigTb4b4b4(
Te6edf3mqtt Tff7b72=
Te6edf3ModuleConfigTb4b4b4.Te6edf3MQTTConfigTb4b4b4(
Te6edf3enabled Tff7b72= Tff7b72trueTb4b4b4,
Te6edf3proxy_to_client_enabled Tff7b72= Tff7b72trueTb4b4b4,
Te6edf3root Tff7b72= Ta5d6ff"Ta5d6ffmsh/US/testTa5d6ff"Tb4b4b4,
Te6edf3json_enabled Tff7b72= Tff7b72trueTb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3telemetry Tff7b72=
Te6edf3ModuleConfigTb4b4b4.Te6edf3TelemetryConfigTb4b4b4(
Te6edf3device_update_interval Tff7b72= T79c0ff3T79c0ff0T79c0ff0Tb4b4b4,
Te6edf3environment_measurement_enabled Tff7b72= Tff7b72trueTb4b4b4,
Te6edf3power_measurement_enabled Tff7b72= Tff7b72trueTb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3canned_message Tff7b72=
Te6edf3ModuleConfigTb4b4b4.Te6edf3CannedMessageConfigTb4b4b4(
Te6edf3rotary1_enabled Tff7b72= Tff7b72trueTb4b4b4,
Te6edf3inputbroker_pin_a Tff7b72= T79c0ff1T79c0ff2Tb4b4b4,
Te6edf3inputbroker_pin_b Tff7b72= T79c0ff1T79c0ff3Tb4b4b4,
Te6edf3send_bell Tff7b72= Tff7b72trueTb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3statusmessage Tff7b72= Te6edf3ModuleConfigTb4b4b4.Te6edf3StatusMessageConfigTb4b4b4(Te6edf3node_status Tff7b72= Ta5d6ff"Ta5d6ffReady to meshTa5d6ff"Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3fixed_position Tff7b72= Te6edf3PositionTb4b4b4(Te6edf3latitude_i Tff7b72= T79c0ff3T79c0ff2T79c0ff7T79c0ff7T79c0ff6T79c0ff6T79c0ff6T79c0ff5T79c0ff0Tb4b4b4, Te6edf3longitude_i Tff7b72= Tff7b72-T79c0ff9T79c0ff6T79c0ff7T79c0ff9T79c0ff6T79c0ff9T79c0ff8T79c0ff9T79c0ff0Tb4b4b4, Te6edf3altitude Tff7b72= T79c0ff1T79c0ff3T79c0ff8Tb4b4b4)Tb4b4b4,
Te6edf3ringtone Tff7b72= Ta5d6ff"Ta5d6fftones/notify.mp3Ta5d6ff"Tb4b4b4,
Te6edf3canned_messages Tff7b72= Ta5d6ff"Ta5d6ffAlpha|Bravo|CharlieTa5d6ff"Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ff`profile export then import round trips empty DeviceProfile`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{ Te6edf3assertRoundTripTb4b4b4(Te6edf3DeviceProfileTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ff`profile export then import round trips partially populated DeviceProfile`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3assertRoundTripTb4b4b4(
Te6edf3DeviceProfileTb4b4b4(
Te6edf3long_name Tff7b72= Ta5d6ff"Ta5d6ffPartial NodeTa5d6ff"Tb4b4b4,
Te6edf3module_config Tff7b72=
Te6edf3LocalModuleConfigTb4b4b4(Te6edf3statusmessage Tff7b72= Te6edf3ModuleConfigTb4b4b4.Te6edf3StatusMessageConfigTb4b4b4(Te6edf3node_status Tff7b72= Ta5d6ff"Ta5d6ffStanding byTa5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tff7b72private Tff7b72suspend Tff7b72fun Te6edf3TestScopeTb4b4b4.Td2a8ffassertRoundTripTb4b4b4(Te6edf3profileTb4b4b4: Te6edf3DeviceProfileTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3exportUri Tff7b72= Te6edf3CommonUriTb4b4b4.Te6edf3parseTb4b4b4(Ta5d6ff"Ta5d6ffcontent://test/profile.binTa5d6ff"Tb4b4b4)
Tff7b72val Te6edf3reExportUri Tff7b72= Te6edf3CommonUriTb4b4b4.Te6edf3parseTb4b4b4(Ta5d6ff"Ta5d6ffcontent://test/profile-reexport.binTa5d6ff"Tb4b4b4)
Tff7b72var Te6edf3importedProfileTb4b4b4: Te6edf3DeviceProfile? Tff7b72= Tff7b72null
Te6edf3viewModelTb4b4b4.Te6edf3exportProfileTb4b4b4(Te6edf3exportUriTb4b4b4, Te6edf3profileTb4b4b4)
Te6edf3runCurrentTb4b4b4(Tb4b4b4)
Te6edf3viewModelTb4b4b4.Te6edf3importProfileTb4b4b4(Te6edf3exportUriTb4b4b4) Tb4b4b4{ Te6edf3importedProfile Tff7b72= Tffa657it Tb4b4b4}
Te6edf3runCurrentTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3actualImportedProfile Tff7b72= Te6edf3assertNotNullTb4b4b4(Te6edf3importedProfileTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Te6edf3profileTb4b4b4, Te6edf3actualImportedProfileTb4b4b4)
Te6edf3assertContentEqualsTb4b4b4(Te6edf3profileTb4b4b4.Te6edf3encodeTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3fileServiceTb4b4b4.Te6edf3readBytesTb4b4b4(Te6edf3exportUriTb4b4b4)Tb4b4b4)
Te6edf3assertContentEqualsTb4b4b4(Te6edf3profileTb4b4b4.Te6edf3encodeTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3actualImportedProfileTb4b4b4.Te6edf3encodeTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3viewModelTb4b4b4.Te6edf3exportProfileTb4b4b4(Te6edf3reExportUriTb4b4b4, Te6edf3actualImportedProfileTb4b4b4)
Te6edf3runCurrentTb4b4b4(Tb4b4b4)
Te6edf3assertContentEqualsTb4b4b4(Te6edf3fileServiceTb4b4b4.Te6edf3readBytesTb4b4b4(Te6edf3exportUriTb4b4b4)Tb4b4b4, Te6edf3fileServiceTb4b4b4.Te6edf3readBytesTb4b4b4(Te6edf3reExportUriTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tff7b72private Tff7b72class T56d364InMemoryFileService Tb4b4b4: Te6edf3FileService Tb4b4b4{
Tff7b72private Tff7b72val Te6edf3files Tff7b72= Te6edf3mutableMapOfTff7b72<Tffa657StringTb4b4b4, Te6edf3ByteArrayTff7b72>Tb4b4b4(Tb4b4b4)
Tff7b72override Tff7b72suspend Tff7b72fun Td2a8ffwriteTb4b4b4(Te6edf3uriTb4b4b4: Te6edf3CommonUriTb4b4b4, Te6edf3blockTb4b4b4: Te6edf3suspend Tb4b4b4(Te6edf3BufferedSinkTb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4)Tb4b4b4: Tffa657Boolean Tb4b4b4{
Tff7b72val Te6edf3buffer Tff7b72= Te6edf3BufferTb4b4b4(Tb4b4b4)
Te6edf3blockTb4b4b4(Te6edf3bufferTb4b4b4)
Te6edf3filesTff7b72[Te6edf3uriTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tff7b72] Tff7b72= Te6edf3bufferTb4b4b4.Te6edf3readByteArrayTb4b4b4(Tb4b4b4)
Tff7b72return Tff7b72true
Tb4b4b4}
Tff7b72override Tff7b72suspend Tff7b72fun Td2a8ffreadTb4b4b4(Te6edf3uriTb4b4b4: Te6edf3CommonUriTb4b4b4, Te6edf3blockTb4b4b4: Te6edf3suspend Tb4b4b4(Te6edf3BufferedSourceTb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4)Tb4b4b4: Tffa657Boolean Tb4b4b4{
Tff7b72val Te6edf3bytes Tff7b72= Te6edf3filesTff7b72[Te6edf3uriTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tff7b72] Tff7b72?: Tff7b72return Tff7b72false
Te6edf3blockTb4b4b4(Te6edf3BufferTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3writeTb4b4b4(Te6edf3bytesTb4b4b4)Tb4b4b4)
Tff7b72return Tff7b72true
Tb4b4b4}
Tff7b72fun Td2a8ffreadBytesTb4b4b4(Te6edf3uriTb4b4b4: Te6edf3CommonUriTb4b4b4)Tb4b4b4: Te6edf3ByteArray Tff7b72= Te6edf3filesTff7b72[Te6edf3uriTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tff7b72] Tff7b72?: Te6edf3errorTb4b4b4(Ta5d6ff"Ta5d6ffMissing file for Tffd700$Te6edf3uriTa5d6ff"Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Served by rngit 1.5.0 - Generated in 0.13s